from Celda import Celda
class Mapa(object):
  def __init__(self):
    self.archivo = open("mapa.txt", "r")
    self.arreglo = []
    self.__arregloCeldas = []
    self.arreglo = self.archivo.readlines()
    self.archivo.close()
    self.__reduccion()
    self.__crearMatrizObjetos()
    
  def imprimeLista(self):
    for elemento in self.arreglo:
      print elemento
      
  def imprime_Coordenada(self,x,y):
    print self.arreglo[y][x]
    
  def regresaDimension(self):
    contador=0
    for fila in self.arreglo:
      contador+=len(fila)
    return (contador/len(self.arreglo), len(self.arreglo))
  
  def __reduccion(self):
      for x in range (0, len(self.arreglo)):
	self.arreglo[x] = self.arreglo[x].replace(",", "")
	self.arreglo[x] = self.arreglo[x].replace("\n","")
	self.arreglo[x] = self.arreglo[x].replace("\r", "")
	
  def __crearMatrizObjetos(self):
    for cadenas in self.arreglo:
      listaAuxiliar = []
      for caracteres in cadenas:
	listaAuxiliar.append(Celda(caracteres))
      self.__arregloCeldas.append(listaAuxiliar)
      
  def imprimeMatriz(self):
      c = 0
      for listas in self.__arregloCeldas:
	for elemento in listas:
	  elemento.mostrarInformacion()
	  
  def retornaListaImagenes(self):
    arregloImg = []
    for listas in self.__arregloCeldas:
      listaAux = []
      for elementos in listas:
	 listaAux.append(elementos.retornaImagen())
      arregloImg.append(listaAux)
    return arregloImg
  def ImprimirTerreno(self, corX, corY):
    self.__arregloCeldas[corY][corX].mostrarInformacion();
  def revisaAccesoPorCoordenada(self, corX, corY):
    if corX < 0 or corY<0:
      return False
    try:
      return self.__arregloCeldas[corY][corX].revisarAcceso()
    except IndexError:
      return False
  def revisaSiYapase(self, corX, corY):
     return self.revisaAccesoPorCoordenada(corX, corY) and not self.__arregloCeldas[corY][corX].regresaBandera()
  def revisaBandera(self, corX, corY):
    return self.revisaAccesoPorCoordenada(corX, corY) and self.__arregloCeldas[corY][corX].regresaBandera()
  def dibujarAlrededores(self, corX, corY):
    x, y = self.regresaDimension()
    try:
	self.__arregloCeldas[corY][corX].regresarPaisaje()
	self.__arregloCeldas[corY][corX].marcar()
	self.__arregloCeldas[corY][corX].descubrir()
	self.__arregloCeldas[corY+1][corX].regresarPaisaje()
	self.__arregloCeldas[corY+1][corX].descubrir()
	self.__arregloCeldas[corY-1][corX].regresarPaisaje()
	self.__arregloCeldas[corY-1][corX].descubrir()
	self.__arregloCeldas[corY][corX+1].regresarPaisaje()
	self.__arregloCeldas[corY][corX+1].descubrir()
	self.__arregloCeldas[corY][corX-1].regresarPaisaje()
	self.__arregloCeldas[corY][corX-1].descubrir()
    except IndexError:
      pass
    
  def verificaAlrededores(self, corX, corY):
    contador = 0
    cad = ""
    try:
      if self.revisaSiYapase(corX + 1,corY):
	contador = contador + 1  
	cad = "derecha"
      if self.revisaSiYapase(corX - 1,corY):
	contador = contador + 1 
	cad = "izquierda"
      if self.revisaSiYapase(corX,corY + 1):
	contador = contador + 1
	cad = "abajo"
      if self.revisaSiYapase(corX,corY - 1):
	contador = contador + 1
	cad = "arriba"
    except UnboundLocalError:
      pass
    return contador, cad
  
  def regresarBandera(self, corX, corY):
    return self.__arregloCeldas[corY][corX].regresaBanderaFigura()
  def regresarDesicionCor(self, corX, corY):
    return self.__arregloCeldas[corY][corX].regresarDesicion()
  def regresaDesicionIMG(self, corX, corY):
    return self.__arregloCeldas[corY][corX].regresarDesicionIMG()
  def marcarDes(self, corX, corY):
    self.__arregloCeldas[corY][corX].marcarDesicion()